;初始化后，显卡默认工作在文本模式，文本缓冲区的第一个字符地址为0xb800
mov ax,0xb800
mov es,ax

;向显存写入'Label Offset:'
mov byte [es:0x00],'L'
mov byte [es:0x01],0x07  ;黑底白字，不闪烁，不高亮
mov byte [es:0x02],'a'
mov byte [es:0x03],0x07
mov byte [es:0x04],'b'
mov byte [es:0x05],0x07
mov byte [es:0x06],'e'
mov byte [es:0x07],0x07
mov byte [es:0x08],'l'
mov byte [es:0x09],0x07
mov byte [es:0x0A],' '
mov byte [es:0x0B],0x07
mov byte [es:0x0C],'O'
mov byte [es:0x0D],0x07
mov byte [es:0x0E],'f'
mov byte [es:0x0F],0x07
mov byte [es:0x10],'f'
mov byte [es:0x11],0x07
mov byte [es:0x12],'s'
mov byte [es:0x13],0x07
mov byte [es:0x14],'e'
mov byte [es:0x15],0x07
mov byte [es:0x16],'t'
mov byte [es:0x17],0x07
mov byte [es:0x18],':'
mov byte [es:0x19],0x07
mov byte [es:0x1A],' '
mov byte [es:0x1B],0x07

;初始化数据段寄存器，实际上数据被写在了代码段中，所以数据段和代码段的段地址一致
mov ax,cs
mov ds,ax

;为除法做准备，ax存的是number的汇编地址，bx存除数
;这是32位除以16位数的除法
mov ax,number
mov bx,10

mov dx,0
div bx
;0x7c00：CS是0x0000，但是IP初始值为0x7c00，
;所以数据的汇编地址是number+0x00，但是实际上物理地址还要再加上0x7c00。
;换句话说，代码段从0x0000开始，但是程序不是从0x0000开始的，而是从0x7c00开始的。
mov [0x7c00+number+0x00],dl  

xor dx,dx
div bx
mov [0x7c00+number+0x01],dl

xor dx,dx
div bx
mov [0x7c00+number+0x02],dl

xor dx,dx
div bx
mov [0x7c00+number+0x03],dl

xor dx,dx
div bx
mov [0x7c00+number+0x04],dl

;将每一位上的求得的数值加上0x30，就是对应的ascii码了。再写入到显存中去
mov al,[0x7c00+number+0x04]
add al,0x30
mov [es:0x1C],al
mov byte [es:0x1D],0x07

mov al,[0x7c00+number+0x03]
add al,0x30
mov [es:0x1E],al
mov byte [es:0x1F],0x07

mov al,[0x7c00+number+0x02]
add al,0x30
mov [es:0x20],al
mov byte [es:0x21],0x07

mov al,[0x7c00+number+0x01]
add al,0x30
mov [es:0x22],al
mov byte [es:0x23],0x07

mov al,[0x7c00+number+0x00]
add al,0x30
mov [es:0x24],al
mov byte [es:0x25],0x07

inef: jmp near inef

number db 0,0,0,0,0

times 203 db 0
        db 0x55,0xaa